package com.yjc.drygoods.cart.service;

import com.yjc.drygoods.cart.vo.Cart;
import com.yjc.drygoods.cart.vo.CartItem;
import org.springframework.data.redis.core.BoundHashOperations;

import java.util.List;
import java.util.concurrent.ExecutionException;

/**
 * @author yjc
 * @create 2022-09-21 20:09
 */
public interface CartService {
    /**
     * 添加商品进购物车
     *
     * @param skuId
     * @param num
     * @return
     */
    CartItem addToCart(Long skuId, Integer num) throws ExecutionException, InterruptedException;

    /**
     * 获取指定id的购物项
     *
     * @param skuId
     * @return
     */
    CartItem getCartItem(Long skuId);

    /**
     * 获取当前用户的购物车
     *
     * @return
     */
    Cart getCart() throws ExecutionException, InterruptedException;

    /**
     * 删除指定id的购物车
     *
     * @param cartKey
     */
    void clearCartItems(String cartKey);

    /**
     * 获取指定用户id或者用户key的购物车所有购物项信息
     *
     * @param cartKey
     * @return
     */
    List<CartItem> getCartItems(String cartKey);

    /**
     * 获取到对当前用户购物车的操作工具类
     *
     * @return
     */
    BoundHashOperations<String, Object, Object> getCartOps();

    /**
     * 修改当前购物项的选中状态
     *
     * @param skuId
     * @param check
     */
    void setCartItemCheckStatus(Long skuId, Integer check);

    /**
     * 修改当前购物项数量
     *
     * @param skuId
     * @param num
     */
    void setCartItemCount(Long skuId, Integer num);

    /**
     * 删除指定id的购物项
     *
     * @param deleteId
     */
    void deleteCartItem(Long deleteId);

    /**
     * 获取当前用户所有选中的购物项信息
     *
     * @return
     */
    List<CartItem> getCurrentUserAllCartItems();

    /**
     * 全部删除
     *
     * @return
     */
    void deleteAllCartItem();

}
